/******************************************************************************* * Copyright (c) 2008, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.swt.tools.internal; import java.io.File; public class ReflectParameter extends ReflectItem implements JNIParameter { ReflectMethod method; int parameter; public ReflectParameter(ReflectMethod method, int parameter) { this.method = method; this.parameter = parameter; } public String getCast() { String cast = ((String)getParam("cast")).trim(); if (cast.length() > 0) { if (!cast.startsWith("(")) cast = "(" + cast; if (!cast.endsWith(")")) cast = cast + ")"; } return cast; } @Override public String getMetaData() { String className = method.getDeclaringClass().getSimpleName(); String key = className + "_" + JNIGenerator.getFunctionName(method) + "_" + parameter; MetaData metaData = method.declaringClass.metaData; String value = metaData.getMetaData(key, null); if (value == null) { key = className + "_" + method.getName() + "_" + parameter; value = metaData.getMetaData(key, null); } /* * Support for 64 bit port. */ if (value == null) { JNIType[] paramTypes = method.getParameterTypes(); if (ReflectItem.convertTo32Bit(paramTypes, true)) { key = className + "_" + JNIGenerator.getFunctionName(method, paramTypes) + "_" + parameter; value = metaData.getMetaData(key, null); } if (value == null) { paramTypes = method.getParameterTypes(); if (ReflectItem.convertTo32Bit(paramTypes, false)) { key = className + "_" + JNIGenerator.getFunctionName(method, paramTypes) + "_" + parameter; value = metaData.getMetaData(key, null); } } } /* * Support for lock. */ if (value == null && method.getName().startsWith("_")) { key = className + "_" + JNIGenerator.getFunctionName(method).substring(2) + "_" + parameter; value = metaData.getMetaData(key, null); if (value == null) { key = className + "_" + method.getName().substring(1) + "_" + parameter; value = metaData.getMetaData(key, null); } } if (value == null) value = ""; return value; } public JNIMethod getMethod() { return method; } public JNIClass getTypeClass() { ReflectType type = (ReflectType)getType(); ReflectClass declaringClass = method.declaringClass; String sourcePath = declaringClass.sourcePath; sourcePath = new File(sourcePath).getParent() + "/" + type.getSimpleName() + ".java"; return new ReflectClass(type.clazz, declaringClass.metaData, sourcePath); } public JNIType getType() { return method.getParameterTypes()[parameter]; } public JNIType getType64() { return method.getParameterTypes64()[parameter]; } public int getParameter() { return parameter; } public void setCast(String str) { setParam("cast", str); } @Override public void setMetaData(String value) { String key; String className = method.getDeclaringClass().getSimpleName(); if (method.isNativeUnique()) { key = className + "_" + method.getName () + "_" + parameter; } else { key = className + "_" + JNIGenerator.getFunctionName(method) + "_" + parameter; } method.declaringClass.metaData.setMetaData(key, value); } }